package com.csap.framework.oauth2.client.rest;

import cn.dev33.satoken.oauth2.model.AccessTokenModel;
import com.csap.framework.annotation.apidoc.ApiOperation;
import com.csap.framework.extension.result.ResultParam;
import com.csap.framework.oauth2.UserInfo;
import com.csap.framework.oauth2.open.RoleOpenApi;
import com.csap.framework.oauth2.request.LogoutRequest;
import com.csap.framework.oauth2.request.MobileLoginRequest;
import com.csap.framework.oauth2.request.PlatformRequest;
import com.csap.framework.oauth2.request.RegisterRequest;
import com.csap.framework.oauth2.request.TokenRequest;
import com.csap.framework.oauth2.request.UpdateRequest;
import com.csap.framework.oauth2.response.RegisterResponse;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @Author ycf
 * @Date 2021/9/23 10:00 上午
 * @Version 1.0
 */

public interface Oauth2ClientApi extends RoleOpenApi {
    /**
     * 获取用户信息
     *
     * @return 结果
     */
    @GetMapping("userInfo")
    ResultParam<UserInfo> getUserinfo();

    /**
     * 获取用户信息
     *
     * @param loginId 登录的id
     * @return 结果
     */
    @GetMapping("userInfoId")
    ResultParam<UserInfo> userInfoId(@RequestParam String loginId);

    /**
     * 模式一，模式三，模式四：Code授权码 获取 Access-Token
     *
     * @param tokenRequest 授权数据
     * @return 返回token
     */
    @GetMapping("token")
    ResultParam<AccessTokenModel> token(TokenRequest tokenRequest);

    /**
     * 根据opendId删除用户
     *
     * @param openId openId
     * @return 是否删除成功
     */
    @DeleteMapping("removeByOpenId")
    ResultParam<Boolean> removeByOpenId(@RequestParam String openId);

    /**
     * 普通注册
     *
     * @param registerRequest 请求参数
     * @return 注册结果
     */
    @PostMapping("register")
    ResultParam<RegisterResponse> register(@RequestBody RegisterRequest registerRequest);

    /**
     * 一键注册（不存在注册/存在则不注册）
     *
     * @param registerRequest 请求参数
     * @return 注册结果
     */
    @PostMapping("onekeyRegister")
    ResultParam<RegisterResponse> onekeyRegister(@RequestBody RegisterRequest registerRequest);

    /**
     * 一键登录只支持账号密码
     *
     * @param registerRequest 请求参数
     * @return 登录注册
     */
    @PostMapping("loginRegister")
    ResultParam<AccessTokenModel> loginRegister(@RequestBody RegisterRequest registerRequest);

    /**
     * 一键登录只支持手机号
     *
     * @param registerRequest 请求参数
     * @return token
     */
    @PostMapping("loginRegisterMobile")
    ResultParam<AccessTokenModel> loginRegisterMobile(@RequestBody RegisterRequest registerRequest);

    /**
     * 手机号码登陆
     *
     * @param mobileRequest 手机号登陆参数
     * @return 返回登录的token
     */
    @PostMapping("loginMobile")
    ResultParam<AccessTokenModel> loginMobile(@RequestBody MobileLoginRequest mobileRequest);

    /**
     * 根据OpendId修改用户信息
     *
     * @param updateRequest 修改的参数
     * @return 是否修改成功
     */
    @PutMapping("updateByOpenId")
    ResultParam<Boolean> updateByOpenId(@RequestBody UpdateRequest updateRequest);

    /**
     * 退出登录
     *
     * @return 结果
     */
    @GetMapping("loginOut")
    ResultParam<Boolean> loginOut();

    /**
     * 根据openId退出登录
     *
     * @param logoutRequest 信息
     * @return 是否退出成功
     */
    @GetMapping("logoutByOpenId")
    ResultParam<Boolean> logoutByOpenId(LogoutRequest logoutRequest);

    /**
     * 添加平台
     *
     * @param platformRequest 平台参数
     * @return 结果
     */
    @ApiOperation("添加平台")
    @PostMapping("addPlatform")
    ResultParam<Boolean> addPlatform(@RequestBody PlatformRequest platformRequest);

    /**
     * 修改平台
     *
     * @param platformRequest 平台参数
     * @return 结果
     */
    @ApiOperation("修改平台")
    @PutMapping("updatePlatform")
    ResultParam<Boolean> updatePlatform(@RequestBody PlatformRequest platformRequest);

}
